/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador.Service.RRHH;

import Controlador.Service.Almacen.*;
import Controlador.Bean.Almacen.Producto;
import Controlador.Bean.RRHH.DesempenoHistorico;
import Controlador.Bean.RRHH.Personal;
import Controlador.Bean.Seguridad.Usuario;
import Data.config.SessionFac;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.apache.ibatis.session.SqlSession;

/**
 *
 * @author david
 */
public class ServicioPersonal {
    
    
   public static List<Personal> SeleccionarPersonal(){
       List<Personal> usuarioBD;
       try (SqlSession sqlsession = SessionFac.SessionFactory().openSession()) {
           usuarioBD = sqlsession.selectList("Data.Personal.ServicioPersonal.seleccionarEncargado");
           sqlsession.close();
       }
        return usuarioBD;
    }
    
    
      public List<Personal> filtrarPersonal(String id) throws Exception{
        SqlSession sqlsession = SessionFac.SessionFactory().openSession();
        HashMap<String, String> hm = new HashMap<>();
        hm.put("id", "%"+id+"%");
        List<Personal> data = (List)sqlsession.selectList("Data.Personal.ServicioPersonal.filtrarPersonal", hm);
        sqlsession.close();
        return data;
    }
        public void EncontrarOperario(String id) throws Exception{
        SqlSession sqlsession= SessionFac.SessionFactory().openSession();
        sqlsession.update("Data.Personal.ServicioPersonal.EncontrarOperario", id);
        sqlsession.commit();
        sqlsession.close();
    }
        
        public void MeterEnCorrida(ArrayList<String> cadenaMeter) throws Exception{
        SqlSession sqlsession= SessionFac.SessionFactory().openSession();
        sqlsession.update("Data.Personal.ServicioPersonal.MeterEnCorrida", cadenaMeter);
        sqlsession.commit();
        sqlsession.close();
    }
        public void QuitarDeCorrida(ArrayList<String>  cadenaQuitar) throws Exception{
        SqlSession sqlsession= SessionFac.SessionFactory().openSession();
        sqlsession.update("Data.Personal.ServicioPersonal.QuitarDeCorrida", cadenaQuitar);
        sqlsession.commit();
        sqlsession.close();
       
    }
    
    
    public void guardar(Personal personal) throws Exception{
        SqlSession sqlsession= SessionFac.SessionFactory().openSession();
        if (personal.getTipoPersonal().equals("ADMINISTRADOR")){
            
        personal.setIdEmpleado(obtenerIdSiguiente2(personal.getIdEmpleado(), sqlsession));
        sqlsession.insert("Data.Personal.ServicioPersonal.guardar2", personal);
        sqlsession.commit();
        sqlsession.close();
            
        }
        else if (personal.getTipoPersonal().equals("OPERADOR")){
        personal.setIdEmpleado(obtenerIdSiguiente(personal.getIdEmpleado(), sqlsession));
        sqlsession.insert("Data.Personal.ServicioPersonal.guardar", personal);
        sqlsession.commit();
        sqlsession.close();
        }
    }
     
    public void guardarDesempeno(DesempenoHistorico desempenoHistorico) {
        SqlSession sqlsession= SessionFac.SessionFactory().openSession();
               
        sqlsession.insert("Data.Personal.ServicioPersonal.guardarDesempeno", desempenoHistorico);
        sqlsession.commit();
        sqlsession.close();
            
      
    
    }
    
    public static List<DesempenoHistorico> obtenerListaDesempenos(String tipoMaquina, String turno, String id) {
        SqlSession sqlsession= SessionFac.SessionFactory().openSession();
               
        
        HashMap<String,String> hm = new HashMap<>();
        hm.put("id", id);
        hm.put("tipoMaquina", tipoMaquina);
        hm.put("turno",turno);
        List<DesempenoHistorico> data = (List)sqlsession.selectList("Data.Personal.ServicioPersonal.obtenerListaDesempenos", hm);
        sqlsession.close();
        return data;    
      
    }
    
    
    
    public void eliminar(String id){
        SqlSession sqlsession= SessionFac.SessionFactory().openSession();
        sqlsession.update("Data.Personal.ServicioPersonal.eliminar", id);
        sqlsession.commit();
        sqlsession.close();
    }
    
     public void eliminar2(String id){
        SqlSession sqlsession= SessionFac.SessionFactory().openSession();
        sqlsession.update("Data.Personal.ServicioPersonal.eliminar2", id);
        sqlsession.update("Data.Personal.ServicioPersonal.eliminar3", id);
        sqlsession.commit();
        sqlsession.close();
    }
    
    public void actualizar(Personal personal){
        try (SqlSession sqlsession = SessionFac.SessionFactory().openSession()) {
            sqlsession.update("Data.Personal.ServicioPersonal.actualizar", personal);
            sqlsession.commit();
        }
    }
    
   
    
     public void actualizar2(Personal personal){
        try (SqlSession sqlsession = SessionFac.SessionFactory().openSession()) {
            sqlsession.update("Data.Personal.ServicioPersonal.actualizar2", personal);
            sqlsession.commit();
        }
    }
    
    public List<Personal> seleccionarTodo(){
        SqlSession sqlsession = SessionFac.SessionFactory().openSession();
        List<Personal> data = (List)sqlsession.selectList("Data.Personal.ServicioPersonal.seleccionarTodo");
        sqlsession.close();
        return data;
    }
        public List<Personal> seleccionarObreros(){
        SqlSession sqlsession = SessionFac.SessionFactory().openSession();
        List<Personal> data = (List)sqlsession.selectList("Data.Personal.ServicioPersonal.seleccionarObreros");
        sqlsession.close();
        return data;
    }
    
      public List<DesempenoHistorico> seleccionarTodoDesempenos(){
        SqlSession sqlsession = SessionFac.SessionFactory().openSession();
        List<DesempenoHistorico> data = (List)sqlsession.selectList("Data.Personal.ServicioPersonal.seleccionarTodoDesempenos");
        sqlsession.close();
        return data;
    }
    

    
    
    
    
      public List<Personal> filtrarPersonal2(String id, String nombre){
        SqlSession sqlsession = SessionFac.SessionFactory().openSession();
        HashMap<String, String> hm = new HashMap<>();
        hm.put("id", "%"+id.toUpperCase()+"%");
        hm.put("nombre", "%"+nombre.toUpperCase()+"%");
      
        List<Personal> data = (List)sqlsession.selectList("Data.Personal.ServicioPersonal.filtrarPersonal2", hm);
        sqlsession.close();
        return data;
    }

    public String obtenerNombre(String Id, SqlSession sqlsession){
        HashMap<String, String> data = (HashMap<String,String>)sqlsession.selectOne("Data.Personal.ServicioPersonal.obtenerPersonal", Id);
        return data.get("nombre");
    }

    
    public String obtenerIdSiguiente(String IdPersonal, SqlSession sqlsession){
        
        String id= (String)sqlsession.selectOne("Data.Personal.ServicioPersonal.getNextCodigo");
        
        if(id!=null){
        int cod= Integer.parseInt(id.substring(3)) + 1;
        
        String defecto= "000000";
        String temp= defecto.substring(0, defecto.length()-String.valueOf(cod).length()).concat(String.valueOf(cod));

        id = (id.substring(0,3).concat(temp));}
        
        else{
        id = "EMP000001"; 
        
        }
              
        
        return id;
    }
    
    
      public String obtenerIdSiguiente2(String IdPersonal, SqlSession sqlsession){
        
        String id= (String)sqlsession.selectOne("Data.Personal.ServicioPersonal.getNextCodigo2");
        
        if(id!=null){
        int cod= Integer.parseInt(id.substring(3)) + 1;
        
        String defecto= "000000";
        String temp= defecto.substring(0, defecto.length()-String.valueOf(cod).length()).concat(String.valueOf(cod));

        id = (id.substring(0,3).concat(temp));}
        
        else{
        id = "ADM000001"; 
        
        }
        
        
        
        return id;
    }
    
      
       
      public int contarFilas(String id){
        
        SqlSession sqlsession = SessionFac.SessionFactory().openSession();
        //HashMap<String,Integer> numFilas; 
     
        //Integer filas = (numFilas=cuentaFilas(sqlsession, Id))!=null ? numFilas.get("idempleadoop"):Integer.parseInt("0");
        
        int filas=0;
        filas =  sqlsession.selectOne("Data.Personal.ServicioPersonal.contarFilasDesempeno", id);
        
        
        return filas;
        
       
    }
      
      
        public HashMap<String,Integer> cuentaFilas(SqlSession sqlsession,String Nombre){
        HashMap<String,Integer> data = (HashMap<String,Integer>)sqlsession.selectOne("Data.Personal.ServicioPersonal.seleccionarMaxId",Nombre.toUpperCase()+"-%");
        return data;
    }
      
    
    public HashMap<String,Long> seleccionarMaxId(SqlSession sqlsession,String Nombre){
        HashMap<String,Long> data = (HashMap<String,Long>)sqlsession.selectOne("Data.Personal.ServicioPersonal.seleccionarMaxId",Nombre.toUpperCase()+"-%");
        return data;
    }

    public String MaximoId() {
        String id;
       SqlSession sqlsession = SessionFac.SessionFactory().openSession();
       id = (String)sqlsession.selectOne("Data.Personal.ServicioPersonal.getNextCodigo");
       sqlsession.close();
       return id;
    }
    
       public String obteneridUsuario(String id) {
       
       String idUsuario; 
       SqlSession sqlsession = SessionFac.SessionFactory().openSession();
       idUsuario = (String)sqlsession.selectOne("Data.Personal.ServicioPersonal.obteneridUsuario",id);
       sqlsession.close();
       return idUsuario;
    }
 

   
    void guardarMasivo(ArrayList<Personal> ArregloPersonal, ArrayList<DesempenoHistorico> ArregloDesempeno,SqlSession sqlsession) throws Exception{
         
         for(int i=0; i<ArregloPersonal.size();i++){
         Personal persona = ArregloPersonal.get(i);
         persona.setIdEmpleado(obtenerIdSiguiente(persona.getIdEmpleado(), sqlsession));
         sqlsession.insert("Data.Personal.ServicioPersonal.guardar", persona);
         }
         for(int i = 0; i<ArregloDesempeno.size(); i++){
             DesempenoHistorico desempeno = ArregloDesempeno.get(i);
             sqlsession.insert("Data.Personal.ServicioPersonal.guardarDesempeno", desempeno);
             
         }
        sqlsession.commit();
        
    }

    List<Personal> seleccionarObrerosEstadoCorrida() {
        SqlSession sqlsession = SessionFac.SessionFactory().openSession();
        List<Personal> data = (List)sqlsession.selectList("Data.Personal.ServicioPersonal.seleccionarObrerosCorrida");
        sqlsession.close();
        return data;
    }

    int numHabilitadoCorrida() {
        SqlSession sqlsession = SessionFac.SessionFactory().openSession();
        List<Personal> data = (List)sqlsession.selectList("Data.Personal.ServicioPersonal.seleccionarHabilitadosCorrida");
        sqlsession.close();
        return data.size();
    }
    
    
  
}
